/**
 * 
 */
package com.googlecode.hmvc4gwt.example.hmvcblog.service.gwtrpc.client.blog;

import java.util.List;
import java.util.Set;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.RemoteServiceRelativePath;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogEditDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogEditIdDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogNewDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogPreviewDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogRemoveDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.BlogUpdateDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.BlogNotFoundException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.BlogTitleEmptyException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.blog.exceptions.NotBlogOwnerException;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.dashboard.UserBlogTitleDTO;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.user.UserSessionId;
import com.googlecode.hmvc4gwt.example.hmvcblog.service.dto.user.exception.NotLoggedInException;

/**
 * 
 * @author jens.meiss
 */
@RemoteServiceRelativePath("BlogRemote")
public interface IBlogRemoteService extends RemoteService {

	public void addBlog(BlogNewDTO blogNewDTO) throws BlogTitleEmptyException, NotLoggedInException;
	
	public BlogDTO getBlog(Integer id) throws BlogNotFoundException;
	
	public BlogDTO getBlog(String name) throws BlogNotFoundException;
	
	public void removeBlog(BlogRemoveDTO blogRemoveDTO) throws NotLoggedInException, BlogNotFoundException, NotBlogOwnerException;
	
	public Set<BlogPreviewDTO> getSetBlogPreview();	
	
	public List<UserBlogTitleDTO> getListBlogTitleDTO(UserSessionId userSessionId) throws NotLoggedInException;
	
	public BlogEditDTO getEditBlogDTO(BlogEditIdDTO blogEditIdDTO) throws NotLoggedInException, NotBlogOwnerException, BlogNotFoundException;
	
	public void update(BlogUpdateDTO blogUpdateDTO) throws NotLoggedInException, NotBlogOwnerException, BlogNotFoundException, BlogTitleEmptyException;
	
}
